/*
*作者：luoyixin
*日期：14/6/25
*功能：实现单项链表，以及所有功能
*/
#include<stdio.h>
#include<stdlib.h>
typedef int ElemType;
typedef struct LNode{
   ElemType data;
   struct LNode *next;
}*Link;
typedef struct{
   Link head,tail;
   int len;
}LinkList;
void MakeNode(Link *p,ElemType e)//分配由p指向的值为e的节点
{
   Link new=(Link)malloc(sizeof(Link));
   (*p)->next=new;
   new->data=e;
}
void FreeNode(Link* p)//销毁节点p
{
   free(*p);
}
void InitList(LinkList* L)//初始化链表L
{
   Link h=(Link)malloc(sizeof(Link));
   (*L).head=h;
   Link t=(Link)malloc(sizeof(Link));
   (*L).tail=t;
   ((*L).head)->next=(*L).tail;
   ((*L).tail)->next=(*L).head;
   (*L).len=0;
   printf("链表已经创建！！！\n");
}
void CreateNode(LinkList* L,int n)//创建n个节点，键盘输入
{
   ElemType e;
   int i;
   for(i=n;i>0;i--)
   {  
      Link new=(Link)malloc(sizeof(Link));
      scanf("%d",&e);
      new->next=((*L).head)->next;
      ((*L).head)->next=new;
      new->data=e;
      (*L).len++;
   }
}
void Show(LinkList* L)//打印链表中所有的值
{
   int i;
   Link l=(*L).head;
   printf("链表中一共有%d个节点\n",(*L).len);
   for(i=0;i<(*L).len;i++)
   {
      l=l->next;
      printf("第%d个节点的值为:%d\n",i+1,l->data);
   }
}
void DetroyList(LinkList* L)//销毁链表L
{ 
  if(L==NULL){printf("链表已经空了\n");}
  else{
  Link l=(*L).head;
  Link a;
  int i;
  for(i=(*L).len;i>0;i++)
  {
      a=l->next;
      l->next=a->next;
      free(a);
  }
  free(L);
  printf("链表已经销毁！！！\n");
  }
}
void ClearList(LinkList* L)//清空链表
{
  int i;
  Link l,a;
  l=(*L).head;
  for(i=0;i<(*L).len;i++)
  {
     a=l->next;
     l->next=a->next;
     free(a);
  }
  (*L).len=0;
  printf("链表已经清空！！！\n");
}




